package com.eshang.test.swagger.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration      //高级的@Component注解，加入IOC容器的同时，还配置到注解中
@EnableSwagger2     //开启swagger2
public class SwaggerConfig {
//	--01.设置一会儿要用于判断的环境--------------------------------------------------------------------------------
	Profiles profiles = Profiles.of("devXYX","devSHR");

//	--02.配置swagger文档的信息apiInfo-----------------------------------------------------------------------------
	private ApiInfo apiInfoForXYX() {
		//作者信息
		Contact contact = new Contact(
				//作者姓名
				"xyx",
				//作者主页地址
				"https://i.csdn.net/#/user-center/profile?spm=1001.2014.3001.5516",
				//作者邮箱
				"xyx2112672663@163.com");

		return new ApiInfo(
				//文档标题
				"xyx的SwaggerAPI文档",
				//文档描述
				"潜心静学，沉淀自我",
				//文档版本
				"v1.0",
				//使用协议的地址
				"xxx",
				//作者信息
				contact,
				//许可证
				"Apache 2.0",
				//许可证地址
				"http://www.apache.org/licenses/LICENSE-2.0",
				new ArrayList<>()
		);
	}


	private ApiInfo apiInfoForSHR() {
		//作者信息
		Contact contact = new Contact(
				//作者姓名
				"shr",
				//作者主页地址
				"xxx",
				//作者邮箱
				"ssssssssss@163.com");

		return new ApiInfo(
				//文档标题
				"shr的SwaggerAPI文档",
				//文档描述
				"即使再小的帆也能远航",
				//文档版本
				"v1.0",
				//使用协议的地址
				"xxx",
				//作者信息
				contact,
				//许可证
				"Apache 2.0",
				//许可证地址
				"http://www.apache.org/licenses/LICENSE-2.0",
				new ArrayList<>()
		);
	}

//	--03.配置swagger的docket-----------------------------------------------------------------------------
	@Bean
	//参数environment表示当前的环境
	public Docket docketForXYX(Environment environment) {
		//你负责的这个Artifact的名字
		String artifactName = "test.swagger";

		return new Docket(DocumentationType.SWAGGER_2).
				apiInfo(apiInfoForXYX())
				//设置组名
				.groupName("XYX")
				//通过environment.acceptProfiles判断目前是否处在profiles中设定的环境之下
				//如果是，返回true，则会开启swagger
				.enable(environment.acceptsProfiles(profiles))
				//指定要扫描的包，一般是controller包
				//除了basePackage以外，还可以有（虽然这两个都没什么卵用）：
				//any()：扫描全部
				//none()：都不扫描
				.select().apis(RequestHandlerSelectors.basePackage("com.eshang." + artifactName + ".controller"))
				.build();
	}


	@Bean
	//参数environment表示当前的环境
	public Docket docketForSHR(Environment environment) {
		//你负责的这个Artifact的名字
		String artifactName = "test.swagger";

		return new Docket(DocumentationType.SWAGGER_2).
				apiInfo(apiInfoForSHR())
				//设置组名
				.groupName("SHR")
				//通过environment.acceptProfiles判断目前是否处在profiles中设定的环境之下
				//如果是，返回true，则会开启swagger
				.enable(environment.acceptsProfiles(profiles))
				//指定要扫描的包，一般是controller包
				//除了basePackage以外，还可以有（虽然这两个都没什么卵用）：
				//any()：扫描全部
				//none()：都不扫描
				.select().apis(RequestHandlerSelectors.basePackage("com.eshang." + artifactName + ".controller"))
				.build();
	}
}
